﻿

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using RApplication = Autodesk.Revit.ApplicationServices.Application;


namespace ZhuXingFamilys
{
    /// <summary>
    /// Implement this method as an external command for Revit.
    /// </summary>
    /// <param name="commandData">An object that is passed to the external application
    /// which contains data related to the command,
    /// such as the application object and active view.</param>
    /// <param name="message">A message that can be set by the external application
    /// which will be displayed if a failure or cancellation is returned by
    /// the external command.</param>
    /// <param name="elements">A set of elements to which the external application
    /// can add elements that are to be highlighted in case of failure or cancellation.</param>
    /// <returns>Return the status of the external command.
    /// A result of Succeeded means that the API external method functioned as expected.
    /// Cancelled can be used to signify that the user cancelled the external operation 
    /// at some point. Failure should be returned if the application is unable to proceed with
    /// the operation.</returns>
    [Transaction(TransactionMode.Manual)]
    public class PreviewCommand : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            //获取当前活动文档
            _dbdocument = commandData.Application.ActiveUIDocument.Document;


            TransactionGroup outerGroup = new TransactionGroup(_dbdocument, "preview control");
            outerGroup.Start();

            try
            {
                PreviewModel form = new PreviewModel(commandData.Application.Application, new ElementId(-1));
                //模态窗口
                form.Show();
                form.BringToFront();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                outerGroup.RollBack();
            }

            return Result.Succeeded;
        }


        private Document _dbdocument = null;
    }

}
